<?php
/**
 * Created by PhpStorm.
 * User: s.utkin
 * Date: 05.12.2014
 * Time: 10:36
 */

namespace Pinenut\User\Auth;


use Twitter\Auth;

trait TwitterAuth {
	abstract function config ();

	protected function auth() {
		$token = $this->request->oauth_token;
		$verifier = $this->request->oauth_verifier;

		$twitterAuth = Auth::factory();

		# Запрос на предоставление доступа
		if (!$token && !$verifier) {
			self::authorize($twitterAuth); exit;
		}

		# Запрос даных пользователя
		$userData = self::getRawUserData($twitterAuth, $token, $verifier);

		if ($userData == null) {
			throw new \Exception('Не удалось получить пользовательские данные из Twitter.');
		}

		return $this->createAuth($userData);
	}

	public static function authorize(Auth $twitterAuth)
	{
		$twitterAuth->request_token();
		$oauthData = $twitterAuth->getOAuthData();

		\Session::setValue('twitter_oauth_token_secret', $oauthData['token_secret']);
		$twitterAuth->authorize();
	}

	public static function getRawUserData(Auth $twitterAuth, $token, $verifier)
	{
		$oauthTokenSecret = \Session::getValue('twitter_oauth_token_secret');
		\Session::unsetValue('twitter_oauth_token_secret');
		$twitterAuth->access_token($token, $verifier, $oauthTokenSecret);
		return $twitterAuth->user_data();
	}

	abstract function createAuth($data);
} 